package Vistas.Componentes;

import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.SQLException;
import java.util.Calendar;
import java.util.List;

import javax.swing.DefaultComboBoxModel;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JPanel;
import javax.swing.JTextField;

import Vistas.PedidoStockVista;

import BaseDeDatos.DBProductos;
import BaseDeDatos.DBUsuarios;
import Clases.MateriaPrima;
import Clases.Paso;
import Clases.Usuario;

public class OrdenVistaPaso extends JPanel implements ActionListener{
	private static final long serialVersionUID = 1L;
	private JCheckBox chkTomarPaso;
	private JTextField txtDescripcion;
	private JComboBox cmbOperarios;
	private JTextField txtState;
	private JComboBox cmbMateriaPrima;
	private JTextField txtCantidad;
	private JButton btnFinalizar;
	private Paso paso;
	private Usuario usuario;
	
	public OrdenVistaPaso(Paso p, Usuario u) {
		this.paso = p;
		this.usuario = u;
		
		this.chkTomarPaso = new JCheckBox();
		this.txtDescripcion = new JTextField(10);
		this.cmbOperarios = new JComboBox();
		this.txtState = new JTextField(10);
		this.cmbMateriaPrima = new JComboBox();
		this.txtCantidad = new JTextField(4);
		this.btnFinalizar = new JButton("Finalizar");
		
		this.chkTomarPaso.setText("Tomar");
		
		this.txtState.setEnabled(false);
		this.CargarOperarios();

		this.CargarMateriasPrimas();
		this.cmbMateriaPrima.setVisible(false);
		this.txtCantidad.setVisible(false);
		
		this.chkTomarPaso.addActionListener(this);
		this.btnFinalizar.addActionListener(this);
		
		this.add(this.chkTomarPaso);
		this.add(this.txtState);
		this.add(this.txtDescripcion);
		this.add(this.cmbOperarios);
		this.add(this.cmbMateriaPrima);
		this.add(this.txtCantidad);
		this.add(this.btnFinalizar);
		
		this.CargarPaso();
		
		this.setModo();
		
		this.setLayout(new FlowLayout(FlowLayout.LEFT));
		this.setVisible(true);		
	}

	private void CargarPaso() {
		if (this.usuario.getTipo().equals(Usuario.TIPO_OPERARIO)) {
			//this.chkTomarPaso.setSelected(this.paso.getEstado().equals(Paso.ESTADO_INICIADO));
			//this.chkTomarPaso.setEnabled(!this.paso.getEstado().equals(Paso.ESTADO_FINALIZADO));
			this.chkTomarPaso.setVisible(this.paso.getEstado().equals(Paso.ESTADO_CREADO));
		} else {
			this.chkTomarPaso.setVisible(false);
		}
		
		
		this.txtState.setText(this.paso.getEstado());
		this.txtDescripcion.setText(this.paso.getDescripcion());
		//this.txtDescripcion.setEnabled(!this.paso.getEstado().equals(Paso.ESTADO_CREADO));
		
		if (this.paso.getUsuario() != null) {
			this.cmbOperarios.removeAllItems();
			this.cmbOperarios.addItem(this.paso.getUsuario());
			this.cmbOperarios.setEnabled(false);
		}
		
		if (this.paso.necesitaMateriaPrima()) {
			for (int i = 0; i < this.cmbMateriaPrima.getItemCount(); i++) {
				MateriaPrima item = (MateriaPrima) this.cmbMateriaPrima.getItemAt(i);
				
				if (item.getId().equals(this.paso.getMateriaPrima().getId())) {
					this.cmbMateriaPrima.setSelectedIndex(i);
				}
			}
			
			this.txtCantidad.setText(this.paso.getMateriaPrima().getCantidad().toString());
			this.cmbMateriaPrima.setVisible(true);
			this.cmbMateriaPrima.setEnabled(false);
			this.txtCantidad.setVisible(true);
			this.txtCantidad.setEnabled(false);
		}
		
		this.btnFinalizar.setVisible(!this.paso.getEstado().equals(Paso.ESTADO_FINALIZADO));
		this.btnFinalizar.setEnabled(this.paso.getEstado().equals(Paso.ESTADO_INICIADO));
	}
	
	private void CargarOperarios() {
		List<Usuario> operarioList = null;
		
		try {
			operarioList = new DBUsuarios().getUsuarios(Usuario.TIPO_OPERARIO);
		} catch (SQLException e) {
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
		
		DefaultComboBoxModel dcm = new DefaultComboBoxModel();
		
		for (Usuario u : operarioList) {
			dcm.addElement(u);
		}
		
		this.cmbOperarios.setModel(dcm);
	}

	private void CargarMateriasPrimas() {
		DefaultComboBoxModel dcm = new DefaultComboBoxModel();

		List<MateriaPrima> materiaPrimaList = null;		
		try {
			materiaPrimaList = new DBProductos().getMateriasPrimas();
		} catch (SQLException e) {
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
		
		for (MateriaPrima mp : materiaPrimaList) {
			dcm.addElement(mp);
		}
		
		this.cmbMateriaPrima.setModel(dcm);
	}
	
	private void setModo() {
		if (this.paso.tieneOperario()) {
			boolean enabled = this.paso.getUsuario().getLegajo().equals(this.usuario.getLegajo());
			
			this.chkTomarPaso.setEnabled(enabled);
			this.txtDescripcion.setEnabled(false);
			//this.cmbOperarios.setEnabled(enabled);
			//this.cmbMateriaPrima.setEnabled(enabled);
			//this.txtCantidad.setEnabled(enabled);
			//this.btnFinalizar.setEnabled(enabled);
		} else {
			this.btnFinalizar.setVisible(false);
		}
	}

//	public String getDescripcion() {
//		return this.txtDescripcion.getText();
//	}
//	
//	public Usuario getOperario() {
//		return (Usuario)this.cmbOperarios.getSelectedItem();
//	}
//	
//	public String getEstado() {
//		return this.txtState.getText();
//	}
	
	public MateriaPrima getMateriaPrima() {
		if (this.paso.necesitaMateriaPrima()) {
			MateriaPrima mp = (MateriaPrima)this.cmbMateriaPrima.getSelectedItem();
			mp.setCantidad(Integer.parseInt(this.txtCantidad.getText()));
			
			return mp;
		} else {
			return null;
		}
	}
	
	public void actionPerformed(ActionEvent e) {
		if (e.getSource().equals(this.chkTomarPaso)) {
			if (this.chkTomarPaso.isSelected()) {
				if (this.paso.necesitaMateriaPrima()) {
					Integer stock = this.getStock(this.paso.getMateriaPrima());
					if (stock < this.paso.getMateriaPrima().getCantidad()) {
						this.chkTomarPaso.setSelected(false);
						new PedidoStockVista(this.getMateriaPrima());
					} else {
						this.txtState.setText(Paso.ESTADO_INICIADO);
					}
				} else {
					this.txtState.setText(Paso.ESTADO_INICIADO);
				}
			} else {
				this.txtState.setText(Paso.ESTADO_CREADO);
			}
		}
		
		if (e.getSource().equals(this.btnFinalizar)) {
			this.txtState.setText(Paso.ESTADO_FINALIZADO);
			this.paso.setFechaFinalizacion(Calendar.getInstance().getTime().toString());
			((JButton)e.getSource()).setEnabled(false);
		}
	}

	public Paso getPaso() {
		this.paso.setEstado(this.txtState.getText());
		this.paso.setUsuario((Usuario)this.cmbOperarios.getSelectedItem());
		
		return this.paso;
	}
	
	private Integer getStock(MateriaPrima mp) {
		try {
			return new DBProductos().getStock(mp.getId());
		} catch (SQLException e) {
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
		return null;
	}
}
